ทดลองใช้ Auto Scaling ใน EC2
ก่อนเริ่มบทความ
เนื้อหาในบทความนี้ประกอบไปด้วยเนื้อหาที่มีความซับซ้อนในระดับนึง
จึงอาจจะมีบางส่วนที่ไม่สามารถอธิบายได้หมดในบทความนี้
ทางผู้เขียนแนะนำให้ผู้อ่านทำความเข้าใจเนื้อหาด้านล่างต่อไปนี้ก่อนอ่านบทความนี้
・【Update】วิธีติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
・การสร้าง VPC Beginner และเชื่อมต่อกับ EC2 Instance
・การใช้ AMI เพื่อ Copy ข้อมูลของ EC2 Instance
・ทดลองใช้ ALB ของ EC2 เพื่อแบ่งการเชื่อมต่อ
สิ่งที่จะทำในบทความนี้
สวัสดีครับ ผม ต้า ครับ
วันนี้เราจะมาลองใช้เครื่องมือใน EC2 ที่มีชื่อว่า Auto Scaling กันครับ
Auto Scaling จะช่วยให้เราสร้าง instance ขึ้นอัตโนมัติตามที่เราตั้งค่า
โดยสามารถใช้ได้ในกรณีที่ instance มีปัญหาต่างๆเช่น ถูก Terminated
หรือเพิ่มจำนวน instance ขึ้นเพื่อจัดการปัญหา Traffic ที่มีจำนวนมาก
หรือในทางกลับกันคือลดจำนวน instance เมื่อมี Traffic จำนวนน้อย
โอเคครับ งั้นเรามาเริ่มทำกันเลยครับ
ขั้นตอนการทดลองโดยรวม
1.สร้าง VPC
2.สร้าง EC2 Master กับ ตั้งค่าข้างใน OS
3.สร้าง AMI กับ สร้าง Launch Template
4.สร้าง Auto Scaling Group กับเปลี่ยนการตั้งค่า ELB
5.ตรวจสอบผลการทดลอง
1.สร้าง VPC
ในขั้นตอนแรกเราจะมาสร้าง VPC ให้ได้ตามรูปด้านบนกันก่อนนะครับ
โดยวิธีการสร้าง VPC สามารถดูได้ที่ลิ้งค์ด้านล่างนี้ครับ↓↓↓
แต่ให้ตั้งค่าตามด้านล่างนี้นะครับ
การสร้าง VPC Beginner
Name tag auto-generation:supanut-test
(ตั้งชื่อของ VPC อะไรก็ได้)
IPv4 CIDR block:192.168.0.0/16
Availability Zones (AZs) (2):1a
1b
Number of public subnets:2
Number of private subnets:0
Public subnet CIDR block in ap-southeast-1a:192.168.1.0/24
Public subnet CIDR block in ap-southeast-1b:192.168.2.0/24
NAT gateways:None
VPC endpointsInfo:None
Enable DNS hostnames: ✅
Enable DNS resolution: ✅
ตั้งค่าเสร็จแล้วก็กด Create VPC
ได้เลยครับ
ตั้งค่า Subnet
หลังจากนั้นให้ไปที่ฟังก์ชันSubnets
แล้วให้ตั้งค่า Public Subnet ทั้ง public1
และ public2
ให้ ✅Enable auto-assign public IPv4 address
เราสามารดูวิธีตั้งค่า Public Subnet ได้ตามบทความด้านล่างนี้ครับ↓↓↓
2.สร้าง EC2 Instance ตัว Master
โดยขั้นตอนต่อไปเราจะสร้าง EC2 Instance ที่เป็น template ไว้สำหรับ AMI และหลังจากนั้นให้เชื่อมต่อ PuTTY ด้วย
โดยสามารถดูวิธีการสร้างและเชื่อมต่อได้ที่ลิ้งค์ด้านล่างนี้↓↓↓
แต่ให้ตั้งค่าตามด้านล่างนี้นะครับ (นอกนั้นให้เหมือนในบทความได้เลยครับ)
【Update】วิธีติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
Name:supanut-test-ec2-m
(ตั้งชื่อให้สอดคล้องกับที่ทำมา)
VPC:เลือก VPC ที่เราสร้างขึ้นมาในขั้นตอนที่แล้ว
Subnet:public1(ตามแผนภาพที่ร่างไว้↑↑↑)
Auto-assign public IP:Enable
Security group name:supanut-test-ec2
(จะลองให้ทั้ง 2 Instance ใช้ Security group เดียวกัน)
Description:supanut-test-ec2
Security group rule 1
Type:ssh
Source type:My IP
Security group rule 2
Type:HTTP
Source type:Anywhere
Key pair:supanut-test-ec2
เสร็จแล้วกดLaunch instance
เลยครับ
แล้วให้เราเชื่อมต่อ PuTTY ตามบทความด้านบนทุกอย่างเลยครับ
และใช้คำสั่งนี้เพื่ออัพเดทข้อมูลให้เป็นเวอร์ชั่นล่าสุด
yum update -y
หลังจากนั้นใช้เราใช้คำสั่งนี้เพื่อเปลี่ยน Time zone เป็นเวลาไทยครับ
ln -sf /usr/share/zoneinfo/Asia/Bangkok /etc/localtime
แล้วใช้คำสั่งนี้เพื่อเช็คดูเวลาได้ หากถูกต้องเวลาจะเป็น +07
ครับ
date
และหลังจากนั้นให้เรา Install PHP 8.0 และ Apache EC2 Instance ตามคำสั่งด้านล่างนี้ครับ
amazon-linux-extras install -y php8.0
ตรวจสอบเวอร์ชั่น php
php -v
ติดตั่ง Apache
yum install httpd -y
เริ่มต้นระบบ Apache
systemctl start httpd
ตั้งค่าเริ่มต้นระบบ Apache อัตโนมัติด้วยคำสั่งนี้ ถ้าไม่ทำการตั้งค่าคำสั่งนี้ Apache ก็จะหยุดทำงานหลังจากที่ Start และ Stop Instance
systemctl enable httpd.service
ตรวจสอบเวอร์ชั่น httpd(Apache)
httpd -v
เรียกใช้คำสั่งนี้เพื่ออัพโหลดไฟล์ที่จะใช้แสดงหน้าเว็บไซต์
chmod 777 /var/www/html/
แล้วเรียกใช้คำสั่งนี้ เพื่อไปยัง address /var/www/html/
cd /var/www/html/
แล้วเรียกใช้คำสั่งนี้ เพื่อสร้างไฟล์ index.php
vi index.php
กดปุ่ม i
เพื่อเข้าสู่โหมดเขียน แล้วเพิ่มคำนี้ลงไป
<?php phpinfo();
แล้วกด Esc
แล้วพิม :x
แล้วกด Enter เพื่อ save file
3.สร้าง AMI
หลังจากที่เราInstall PHP 8.0 และ Apache EC2 Instance เสร็จแล้ว เราจะมาใช้ฟังก์ชันของ EC2 ที่เรียกว่า AMIs
ในการสร้าง Copy การตั้งค่า ของ Instance เพื่อนำไปใช้ใน Auto Scaling
โดยสามารถดูวิธีการสร้างได้ที่ลิ้งค์ด้านล่างนี้↓↓↓
การใช้ AMI เพื่อ Copy ข้อมูลของ EC2 Instance
Image name:supanat-test-ec2-ami
Tag:Name
supanat-test-ec2-ami
เมื่อเราสร้างเสร็จแล้ว ไม่จำเป็นต้องใช้ AMI ไปสร้าง Instanceตัวใหม่นะ
เมื่อสร้าง AMI เสร็จแล้ว ให้ไปขั้นตอนต่อไปได้เลยครับ
4.สร้าง launch template
ในหน้าเว็บ EC2 Service ให้เราคลิกเข้าไปที่ฟังก์ชัน Launch Templates
แล้วกด Create launch template
ครับ
จากนั้นให้เราตั้งค่าตามนี้
name:supanut-test-launch-template
description:supanut-test-launch-template
Auto Scaling guidance:✅Provide guidance to help me...
Application and OS Images: My AMIs
(และเลือก AMI ที่เราสร้าง)
Instance type: t3a.nano
Key pair: supanut-test-ec2
(ใช้ตัวเดียวกับ Master)
Subnet: Don't include in launch template
(ที่ไม่ต้องตั้งค่าเนื่องจากเราต้องการให้สร้าง Instance ทั้ง 2 available zone)
Security Group: supanut-test-ec2
เสร็จแล้วให้กดปุ่มCreate launch template
ได้เลยครับ
5.สร้าง Auto Scaling Group
ในหน้าเว็บ EC2 Service ให้เราคลิกเข้าไปที่ฟังก์ชัน Auto Scaling Groups
แล้วกด Create Auto Scaling group
ครับ
แล้วให้เราตั้งค่าตามนี้ครับ
name:supanut-test-auto-scaling-group
Launch template:supanut-test-launch-template
แล้วกดปุ่มNext
ครับ
VPC:เลือก VPC ที่เราสร้างขึ้นมาในขั้นตอนที่แล้วๆ
Availability Zones and subnets:1a
1b
(เลือกทั้งสอง)
แล้วกดปุ่มNext
ครับ
หน้านี้เป็นหน้าที่เราจะใส่ALB
โดยเราสามารถนำALB
ที่สร้างก่อนหน้านี้มาใช้ก็ได้
หรือจะสร้างALB
ที่หน้านี้เลยก็ได้ โดยในการทดลองนี้ ผมจะสร้างในหน้านี้ครับ
Load balancing:◎Attach to a new load balancer
Load balancer name:supanut-test-alb
Load balancer scheme:Internet-facing
Default routing:Create a target group
New target group name:supanut-test-target-group
แล้วกดปุ่มNext
ครับ
ในหน้านี้เราจะสามารถตั้งค่าจำนวน Instance ที่จะสร้างขึ้นจาก Auto Scaling ได้
แต่เพื่อไม่ให้เป็นการยุ่งยากครั้งนี้เราจะตั้งค่าแบบง่ายๆกันก่อนครับ
Group size
Desired capacity:2
Minimum capacity:2
Maximum capacity:2
Scaling policies:◎None
แล้วกดปุ่มNext
ไปเรื่อยๆ จนถึงCreate Auto Scaling group
เลยครับ
จากนั้นให้เราไปเช็ค Auto Scaling groups
Load Balancers
Target Groups
ว่ามีอะไรถูกสร้างตามการตั้งค่าของเราแล้วรึยัง
แล้วให้เราไปที่Instances
จะพบว่ามีInstance
ถูกสร้างขึ้นตามที่เราตั้งค่าไว้
6.สร้าง Security Group สำหรับ ALB
เมื่อเราสร้าง Auto Scaling สำเร็จ แล้วเรานำ DNS name ของ ALB ไปเปิดจะพบว่าไม่สามารถเข้าใช้งานเว็บไซต์ได้
นั่นเป็นเพราะว่าเรายังไม่ได้ตั้งค่า Security Group สำหรับ ALB นั่นเอง
ให้เราไปยังหน้า Security Groups ใน EC2 Service
กดปุ่มสีส้มๆ Create security group
ตั้งค่าตามนี้ครับ
Security group name: supanut-test-alb
(ตั้งชื่อให้สอดคล้องกับที่ทำมา)
Description: supanut-test-alb
(ตั้งชื่อให้สอดคล้องกับที่ทำมา)
VPC:เลือก VPC ที่เราสร้างขึ้นมาในขั้นตอนที่แล้ว
Inbound rules
กด Add rule
Type: HTTP
Source: Anywhere-IPv4
แล้วให้เราไปที่หน้าLoad Balancers
ครับ
เลือก Load Balancer
ที่เราสร้างขึ้น
แล้วเลือกEdit security groups
แล้วเลือกsecurity group
ที่เราสร้างขึ้น
แค่นี้เราก็จะสามารถเข้าใช้เว็บไซต์ผ่านDNS name
ได้แล้วครับ
7.ทดสอบ Auto Scaling
ให้เรา Terminate instance
ที่สร้างขึ้นจาก Auto Scaling ดูครับ
แล้วให้เราไปที่ Target Group แล้วเช็คดูจะพบว่าเรา Terminate ไปแล้วแต่ว่ายังเป็น Healthy อยู่
และเมื่อเรากลับมาดูที่หน้า Instances อีกทีจะพบว่ามี Instance ถูกสร้างขึ้นใหม่จาก Auto Scaling มาอีก
และนี่ก็เป็นเพราะ Auto Scaling จะคอยตรวจสอบว่า EC2 เป็นไปตามเงื่อนไขที่ตั้งค่าไว้ไหม
หากไม่ตรงตามเงื่อนไขก็จะปรับค่าให้ตรงตามเงื่อนไข โดยในกรณีนี้คือการเปิดใช้งาน Instance ให้ครบ 2 ตัวนั่นเอง
เมื่อเราทดสอบเสร็จ ให้เราไปตั้งค่า Security Group ของ Instance(ในที่นี้ของผมคือ supanut-test-ec2
)
ให้เราเปลี่ยนในส่วนของ source ของ HTTP เป็น IP ของ VPC(ในที่นี้ของผมเป็น 192.168.0.0/16
)
เพียงแค่นี้เราก็จะสามารถป้องกันการเชื่อมต่อจากภายนอกที่ผ่านมาทาง IP ของ Instance ได้
และทำให้DNS name
ของ Target Group เป็นประตูเดียวที่สามารถเข้าใช้เว็บไซต์จากภายนอกได้
8.วิธีการลบสิ่งที่สร้างขึ้นในการทดลองครั้งนี้
เนื่องจากไม่ว่าเราจะ Terminate Instance ยังไง Instance ก็จะถูกสร้างขึ้นใหม่จาก Auto Scaling อยู่ดี
ทำให้ต้องมีขั้นตอนในการลบ เพื่อลบทุกอย่างที่เราสร้างขึ้นมาในการทดลองครั้งนี้
โดยให้เราเริ่มตามนี้
ลบ ELB
ลบ Target Group
ลบ Auto Scaling Group
ลบ Launch Templates
ลบ AMI
ลบ Snapshot
เช็คว่า Instance ที่เกิดจาก Auto Scaling ถูกลบ แล้วให้ลบsupaunt-test-ec2-m
ลบ Security Group
ลบ KeyPair
ลบ VPC
สรุป
Auto Scaling เป็นเครื่องมือของ EC2 ที่สามารถปรับเปลี่ยนเพิ่มลดจำนวนของ Instance ได้โดยอัตโนมัติ
เมื่อเรา Terminate Instance แล้วหากเรายังเปิดใช้งาน Auto Scaling อยู่ ตัว Instance จะถูกสร้างใหม่
อัตโนมัติตามที่เราตั้งค่า โดยในขั้นต่อไปคุณสามารถตั้งค่า Auto Scaling ในแบบอื่นอีกได้
เช่น เมื่อ CPU ถูกใช้งานเกิน 50% คุณจะ .... โดยสามารถศึกษาเพิ่มเติมได้ที่
Amazon EC2 Auto Scaling
บทความที่เกี่ยวข้อง
・AWS Auto Scaling คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS ในปี 2022
・【Update】วิธีติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
・การสร้าง VPC Beginner และเชื่อมต่อกับ EC2 Instance
・การใช้ AMI เพื่อ Copy ข้อมูลของ EC2 Instance
・ทดลองใช้ ALB ของ EC2 เพื่อแบ่งการเชื่อมต่อ